//
//  ViewController.swift
//  03-闭包循环引用
//
//  Created by 李南江 on 15/9/6.
//  Copyright © 2015年 xiaomage. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    // Swift中定义属性, 必须在构造方法中初始化, 否则就必须加上?
    // 注意: 以下写法代表闭包的返回值可以为nil
    // var finished: ()->()?
    var finished: (()->())?
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // OC中 __weak typeof(self) weakSelf = self
        weak var weakSelf = self
        loadData { () -> () in
            
            print("更新UI")
            // 闭包和block很像, 都是提前准备好代码, 在需要时执行
            // block会对外部变量进行copy, 保证执行代码时变量还在
            // block中用到self一定要非常小心
            // 闭包也一样, 为了能够准确定位到view, 所以需要写self
            // 提示: Swift开发中能不写self就不写self, 一看到self就想到闭包
//            self.view.backgroundColor = UIColor.redColor()
            weakSelf!.view.backgroundColor = UIColor.redColor()
        }
    }
    func loadData(finished: ()->()){
        print("耗时操作")
        // 保存闭包
        self.finished = finished
        finished()
    }
    
    // 类似于dealloc方法
    deinit
    {
        print("我滚了")
    }

}

